<?php

// test/unit/CodigoQrTest.php
require_once dirname(__FILE__).'/../bootstrap/unit.php'; 
       
// Colocando la cantidad de pruebas unitarias a realizar
$t = new lime_test(2);

// Valores de Prueba del Paquete

    // Valores de prueba del cliente
	     $IDCliente = 1;
	// Valor de prueba de una Ruta Asignada por el DESPACHADOR al RECOLECTOR
	     $EmpRutaRecolectorAsignada = 1;	 
		 
    // Valores de prueba del Empleado DESPACHADOR
	     $EmpId       =  1;
		 $EmpNombre   = 'Jose';
		 $EmpApellido = 'Marin';
		 $EmpLogin    = 'Jose';
		 $EmpPass     = '78946';
		 $EmpPerfil   = 'DESPACHADOR';
		 $EmpRuta     =  null;		 
    // Valores de prueba del Empleado Asignado para la recoleccion
	     $EmpIdRecolector       =  2;
		 $EmpNombreRecolector   = 'Karen';
		 $EmpApellidoRecolector = 'Hernandez';
		 $EmpLoginRecolector    = 'Karen';
		 $EmpPassRecolector     = '12345';
		 $EmpPerfilRecolector   = 'RECOLECTOR';
		 $EmpRutaRecolector     =  null;		 	 
		
	// Valores de prueba de la solicitud
		 $IDSolicitud = 1;
		 $solEstado = 'PENDIENTE POR RECOLECCION';// estatus: PENDIENTE POR RECOLECCION -> RECOLECTADA -> ENTREGADA
		 $fechaSolicitud = '12/11/2011';
		
    // Valores de Prueba para la libreta de Entrega
		$Lenid_LE        = 1;
		$LenAvecalle     = 'Ayacucho';
		$LenResidcasa    = 'Say park II';
		$LenAptonumcasa  = '61';
		$LenUrbanizacion = 'la paz';
		$Lenciudad       = 'caracas';
		$Lenpais         = 'Venezuela';
		$LencodigoPostal = '212';
		$LenLatitud      = 10.4827949;
		$LenLongitud     = -66.94369999999998;
		$LenNomdireccion = 'apartamentoSayParkII';
			
	// Valores de Prueba para la libreta de recoleccion	
		$Lreid_LE        = 1;
		$LreAvecalle     = 'Avenida 93';
		$LreResidcasa    = 'Esmeralda';
		$LreAptonumcasa  = 'B-17';
		$LreUrbanizacion = 'Bolivar';
		$Lreciudad       = 'Maracaibo';
		$Lrepais         = 'Venezuela';
		$LrecodigoPostal = '212';
		$LreLatitud      = 10.64504;
		$LreLongitud     = -71.63715400000001;
		$LreNomdireccion = 'direccionDeRecoleccion';
		
// Instanciando Objetos de la clase Libreta Recoleccion
 $LibretaRecoleccion = new LibretaRecoleccion();
		$LibretaRecoleccion->setLreId($Lreid_LE);
		$LibretaRecoleccion->setLreAvecalle($LreAvecalle);
		$LibretaRecoleccion->setLreResidcasa($LreResidcasa);
		$LibretaRecoleccion->setLreAptonumcasa($LreAptonumcasa);
		$LibretaRecoleccion->setLreUrbanizacion($LreUrbanizacion);
		$LibretaRecoleccion->setLreCiudad($Lreciudad);
		$LibretaRecoleccion->setLrePais($Lrepais);
		$LibretaRecoleccion->setLreCodpostal($LrecodigoPostal);
		$LibretaRecoleccion->setLreLatitud($LreLatitud);
		$LibretaRecoleccion->setLreLongitud($LreLongitud);
		$LibretaRecoleccion->setLreNomdireccion($LreNomdireccion);
		$LibretaRecoleccion->setLreCliente($IDCliente);		

// Instanciando Objetos de la clase Empleado
      // Instaciamos para el Objeto del Despachador
         $empleadoDespachador = new Empleado();
	              $empleadoDespachador->setEmpId($EmpId);
		          $empleadoDespachador->setEmpNombre($EmpNombre);
		          $empleadoDespachador->setEmpApellido($EmpApellido);
				  $empleadoDespachador->setEmpLogin($EmpLogin);
		          $empleadoDespachador->setEmpPass($EmpPass);
		          $empleadoDespachador->setEmpPerfil($EmpPerfil);
				  $empleadoDespachador->setEmpRuta($EmpRuta);
				  
	  // Instaciamos para el Objeto del Recolector
         $empleadoRecolector = new Empleado();
	              $empleadoRecolector->setEmpId($EmpIdRecolector);
		          $empleadoRecolector->setEmpNombre($EmpNombreRecolector);
		          $empleadoRecolector->setEmpApellido($EmpApellidoRecolector);
				  $empleadoRecolector->setEmpLogin($EmpLoginRecolector);
		          $empleadoRecolector->setEmpPass($EmpPassRecolector);
		          $empleadoRecolector->setEmpPerfil($EmpPerfilRecolector);
				  $empleadoRecolector->setEmpRuta($EmpRutaRecolector); 			  
		
// Instanciando Objetos de la clase Solicitud
  $solicitud = new Solicitud();
       $solicitud->setSolId($IDSolicitud);
	   $solicitud->setSolEstado($solEstado);
	   $solicitud->setSolLibretarecoleccion($LibretaRecoleccion->getLreId());
	   $solicitud->setSolCliente($IDCliente);
	   $solicitud->setSolEmprecolector($EmpIdRecolector);
	   $solicitud->setSolEmpdespachador($EmpId);
		
// Simple comentario para dar inicio a las pruebas unitarias
$t->comment('Iniciando las pruebas');

// Iniciando las pruebas unitarias 

   /* le Pasamos los valores de prueba a la funcion VerificarDisponibilidad()
	*
	*     Las funcion devuelven True en el caso que los datos esten correctos
	*     sino devolvera False en el caso que los datos no cumplan con las reglas
	*     de negocio del sistema, la funcion OK verifica si la prueba Unitaria fue exitosa
	*
	*/ 
  $t->ok($RespuestaDisponibilidad=EmpleadoPeer::VerificarDisponibilidad($empleadoRecolector->getEmpRuta(),$solicitud->getSolEstado()));
  
	/*
	 *     Prueba Unitaria cambiar el estado de una SOLICITUD
	 *                 solo si la respuesta de las anteriores 
	 *                 pruebas unitarias resultan ser "TRUE"    
	 */
	 if ($RespuestaDisponibilidad==true){
		 // se le asigna la una ruta al RECOLECTOR
		 $empleadoDespachador->setEmpRuta($EmpRutaRecolectorAsignada);
		 // Informacion de que la prueba ha sido EXITOSA y especificamos que se le asigno la Solicitud a un determinado RECOLECTOR
		 $t->pass('La prueba fue exitosa, se le Asigno la Solicitud a '.$empleadoRecolector->getEmpNombre().' '.$empleadoRecolector->getEmpApellido());
		 }
		 else // En el caso de que la prueba haya FALLADO
		      /*
			   *   En este CASO, la prueba FALLA debido a que dicha SOLICITUD tiene el ESTADO: ENTREGA o RECOLECTADA,
			   *                 en pocas palabras el DESPACHADOR no puede asignarle una solicititud a un RECOLECTOR 
			   *                 por que la solicitud ya fue ASIGNADA a otro RECOLECTOR.
			   */
			  if (($solicitud->getSolEstado() == 'ENTREGADA') || ($solicitud->getSolEstado() == 'RECOLECTADA')) {
			      $t->fail('La prueba Fallo, El DESPACHADOR no le pudo Asignar la Solicitud al RECOLECTOR por que la SOLICITUD esta en ESTADO: '.$solicitud->getSolEstado());
			 }else
              /*
			   *   En este CASO, la prueba FALLA debido a que a que DICHO RECOLECTOR ya tiene asignada una solicitud o
			   *                 una RUTA determinanda.
			   */			 
			  if (($empleadoRecolector->getEmpRuta() == null) && ($solicitud->getSolEstado() != 'ENTREGADA') || ($solicitud->getSolEstado() != 'RECOLECTADA')){
				  $t->fail('La prueba Fallo, El DESPACHADOR no le pudo Asignar la Solicitud al RECOLECTOR por que a El(ELLA) ya se le asigno una solicitud en la RUTA: '.$empleadoRecolector->getEmpRuta());
		     }
   



